# Maintainer: Antoine Martin (ayakael) <dev@ayakael.net>
# Contributor: Antoine Martin (ayakael) <dev@ayakael.net>

pkgname=dotnet6-stage0
pkgver=6.0.116
pkgrel=4

[ "$CBUILD" != "$CHOST" ] && _cross="-$CARCH" || _cross=""

# Tag of tarball generator.
_gittag=v$pkgver

# Versions of prebuilt artifacts and bootstrap tar
_artifactsver=6.0.112
_bootstrapver="6.0.116"
_bootstraprel=0
_installerver=${_gittag/v}

# Version of packages that aren't defined in git-info
_iltoolsver=6.0.12-servicing.22579.1

# Patches to be used. String before '_' refers to repo to patch
# Look for patch notes within each patch for what they fix / where they come from
# build_* patches applies directly to $builddir
_patches="
	roslyn_57003-mono-namedmutex.patch
	roslyn_revert-lift-version-codeanalysis.patch
	runtime_76500-mono-musl-support.patch
	runtime_76500-properly-set-toolchain-for-crossbuilding-on-alpine.patch
	runtime_82269-mono-thread-coop-undefine-fortify-source.patch
	runtime_84442-support-adding-rids-with-dash-in-base-part.patch
	runtime_84443-suppress-clang-16-warnings.patch
	runtime_remove-usage-of-off64-t.patch
	"
_extra_nupkgs="
	https://globalcdn.nuget.org/packages/system.reactive.core.4.1.1.nupkg
	"

_pkgver_macro=${pkgver%.*}
_pkgver_prior=1
_pkgver_name="${_pkgver_macro//[.0]}"
pkgdesc="The .NET Core stage0 bits for dotnet build"
arch="x86_64 aarch64 armv7"
url=https://www.microsoft.com/net/core
_giturl="https://github.com/dotnet/installer"
license="MIT"
options="!check" # Testsuite in main -build aport
subpackages="
	dotnet$_pkgver_name-stage0-artifacts:artifacts:noarch
	dotnet$_pkgver_name-stage0-bootstrap
	"
source="
	https://lab.ilot.io/dotnet/installer/-/releases/$_gittag/downloads/tarball/dotnet-$_gittag.tar.xz
	dotnet-sdk-$_bootstrapver-linux-musl-x64.noextract::https://dotnetcli.azureedge.net/dotnet/Sdk/$_bootstrapver/dotnet-sdk-$_bootstrapver-linux-musl-x64.tar.gz
	dotnet-sdk-$_bootstrapver-linux-musl-arm64.noextract::https://dotnetcli.azureedge.net/dotnet/Sdk/$_bootstrapver/dotnet-sdk-$_bootstrapver-linux-musl-arm64.tar.gz
	dotnet-sdk-$_bootstrapver-linux-musl-arm.noextract::https://dotnetcli.azureedge.net/dotnet/Sdk/$_bootstrapver/dotnet-sdk-$_bootstrapver-linux-musl-arm.tar.gz
	Private.SourceBuilt.Artifacts.$_artifactsver.noextract::https://dotnetcli.azureedge.net/source-built-artifacts/assets/Private.SourceBuilt.Artifacts.$_artifactsver.tar.gz
	https://globalcdn.nuget.org/packages/runtime.linux-musl-x64.microsoft.netcore.ilasm.6.0.0.nupkg
	https://globalcdn.nuget.org/packages/runtime.linux-musl-arm64.microsoft.netcore.ilasm.6.0.0.nupkg
	https://globalcdn.nuget.org/packages/runtime.linux-musl-arm.microsoft.netcore.ilasm.6.0.0.nupkg
	$_extra_nupkgs
	$_patches
	"
makedepends_host="
	bash
	binutils
	clang
	cmake
	findutils
	g++
	gcc
	grep
	icu-dev
	jq
	krb5-dev
	libintl
	libstdc++
	libucontext-dev
	libunwind-dev
	libxml2-dev
	libxml2-utils
	linux-headers
	lttng-ust-dev
	musl-dev
	musl-utils
	openssl-dev
	pigz
	unzip
	zip
	zlib-dev
	"
case $CARCH in
	s390x|x86) makedepends_host="$makedepends_host libucontext-dev";;
	*) makedepends_host="$makedepends_host lld-dev";;
esac
makedepends_build="
	$makedepends_host
	binutils$_cross
	git
	gcc$_cross
	llvm
	llvm-dev
	python3
	xz
	"
case $CBUILD_ARCH in
	x86_64) _dotnet_arch="x64";;
	aarch64) _dotnet_arch="arm64";;
	armv7|armhf) _dotnet_arch="arm";;
	i586) _dotnet_arch="x86";;
	*) _dotnet_arch=$CBUILD_ARCH;;
esac
case $CTARGET_ARCH in
	x86_64) _dotnet_target="x64";;
	aarch64) _dotnet_target="arm64";;
	armv7|armhf) _dotnet_target="arm";;
	i586) _dotnet_target="x86";;
	*) _dotnet_target=$CTARGET_ARCH;;
esac

builddir="$srcdir"/dotnet-${_gittag/release\/}
_packagesdir="$srcdir"/local-packages
_libdir="/usr/lib"
_nugetdir="$srcdir"/nuget
_downloaddir="$srcdir"/local-downloads
_cli_root="$srcdir"/bootstrap
_nuget="$_cli_root/dotnet nuget"
_outputdir="$srcdir"/artifacts
# if true, then within pipeline environment, in which case send logs there
# to be scooped
if [ -d "$APORTSDIR/logs" ]; then
	_logdir="$APORTSDIR"/logs/$pkgname
else
	_logdir="$srcdir"/logs
fi

# generates tarball containing all components built by dotnet
snapshot() {
	local _pkg="$srcdir"/${builddir##*/}.tar

	ulimit -n 4096
	export NUGET_PACKAGES=$_nugetdir

	if [ -d "$srcdir" ]; then
		cd "$srcdir"
	else
		mkdir -p "$srcdir" && cd "$srcdir"
	fi
	if [ -d "installer" ]; then
		cd "$srcdir"/installer
	else
		git clone $_giturl --branch $_gittag && cd "$srcdir"/installer
	fi

	sed 's|<Exec Command="tar.*|<Exec Command="tar -cf $(TarballFilePath) -C $(TarballDir)/.. $([MSBuild]::MakeRelative($([System.IO.Path]::GetDirectoryName($(TarballDir))), $(TarballDir)))" />|' -i src/SourceBuild/Arcade/tools/SourceBuildArcadeTarball.targets

	if [ -d "$_libdir/dotnet/bootstrap" ]; then
		local _cli_root="$(find /usr/lib/dotnet/bootstrap/6.0* -maxdepth 0 -type d | sort -r | head -n 1)"
	else
		local _cli_root=""
	fi

	_InitializeDotNetCli="$_cli_root" DOTNET_INSTALL_DIR="$_cli_root" DotNetBuildFromSource=true ./build.sh \
		/p:ArcadeBuildTarball=true \
		/p:TarballDir=$builddir \
		/p:TarballFilePath=$_pkg

	msg "Compressing ${builddir##*/}.tar to $SRCDEST"
	xz -T0 -9 -vv -e -c > "$SRCDEST"/${builddir##*/}.tar.xz < "$_pkg"

	cd "$startdir"
	abuild checksum
}

prepare() {
	default_prepare

	mkdir -p "$_cli_root"
	mkdir -p $_packagesdir $_downloaddir $_outputdir $_nugetdir

	# links logfiles to pipeline logs for easy pickup in pipelines
	mkdir -p "$_logdir" "$builddir"/artifacts
	ln -s "$_logdir" "$builddir"/artifacts/logs
	ln -s "$_logdir" "$builddir"/artifacts/log
	for i in "$builddir"/src/*; do
		if [ -f "$i" ]; then
			continue
		fi
		mkdir -p "$_logdir"/${i##*\/} "$builddir"/src/${i##*\/}/artifacts
		ln -s "$_logdir"/${i##*\/} "$builddir"/src/${i##*\/}/artifacts/log
	done

	unzip -po "$srcdir"/runtime.linux-musl-$_dotnet_arch.microsoft.netcore.ilasm.*.nupkg runtimes/linux-musl-$_dotnet_arch/native/ilasm > $_cli_root/ilasm
	chmod +x "$_cli_root"/ilasm

	tar -xf "$srcdir"/dotnet-sdk-$_pkgver_macro*$_dotnet_arch.noextract -C "$_cli_root" --no-same-owner

	for i in $_extra_nupkgs; do
		local filename=${i/::*}
		local filename=${filename##*/}
		$_nuget push "$srcdir"/$filename --source="$_packagesdir"
	done

	# adjusts sdk version and packagedir to expected
	for i in runtime sdk installer aspnetcore roslyn; do
		$_nuget add source $_packagesdir --name local --configfile "$builddir"/src/$i/NuGet.config
		tmp=$(mktemp)
		jq ".sdk.version = \"$_bootstrapver\"" "$builddir"/src/$i/global.json > $tmp && mv $tmp "$builddir"/src/$i/global.json
	done
}

_runtime() {
	"$_cli_root"/dotnet build-server shutdown
	if [ -z "${_runtimever+x}" ]; then
		local _runtimever=$(grep OutputPackageVersion "$builddir"/git-info/runtime.props | sed -E 's|</?OutputPackageVersion>||g' | tr -d ' ')
	fi
	local _runtimever_ns=$(awk '{if($2 ~ "Name=\"VS.Redist.Common.NetCore.SharedFramework.x64.*\""){print $3}}' "$builddir"/src/installer/eng/Version.Details.xml | awk -F '"' '{print $2}')

	msg "[$(date)] Building runtime version $_runtimever"
	cd "$builddir"/src/runtime

	local args="
		-c Release
		-clang
		-arch $_dotnet_target
		-bl
		/consoleLoggerParameters:ShowTimestamp
		/p:NoPgoOptimize=true
		/p:EnableNgenOptimization=false
		/p:GitCommitHash=$(grep GitCommitHash "$builddir"/git-info/runtime.props | sed -E 's|</?GitCommitHash>||g' | tr -d ' ')
		/p:ILAsmToolPath=$_cli_root
		"
	if [ "$CBUILD" != "$CHOST" ]; then
		local args="$args -cross"
		# https://github.com/dotnet/runtime/pull/75597 broke crossbuilding when true
		local DotNetBuildFromSource=false
		# x86 build of mono broken, thus do not build mono
		case $_dotnet_target in
			x86) local args="$args /p:DefaultSubsets=clr+libs+host+packs";;
		esac
	fi
	if [ "$_runtimever" != "${_runtimever##*-}" ]; then
		local args="$args /p:VersionSuffix=${_runtimever##*-}"
	fi
	DotNetBuildFromSource=$DotNetBuildFromSource ROOTFS_DIR="$CBUILDROOT" ./build.sh $args

	for i in artifacts/packages/*/*/*.nupkg; do
		$_nuget push $i --source="$_packagesdir"
	done
	mkdir -p "$_downloaddir"/Runtime/$_runtimever_ns
	cp artifacts/packages/*/*/dotnet-runtime-*-*.tar.gz $_downloaddir/Runtime/$_runtimever_ns
}

_roslyn() {
	"$_cli_root"/dotnet build-server shutdown
	if [ -z "${_roslynver+x}" ]; then
		local _roslynver=$(grep OutputPackageVersion "$builddir"/git-info/roslyn.props | sed -E 's|</?OutputPackageVersion>||g' | tr -d ' ')
	fi
	local _roslynver_ns=$(awk '{if($2 == "Name=\"Microsoft.Net.Compilers.Toolset\""){print $3}}' "$builddir"/src/installer/eng/Version.Details.xml | awk -F '"' '{print $2}')

	msg "[$(date)] Building roslyn version $_roslynver"
	cd "$builddir"/src/roslyn

	local args="
		-c Release
		-bl
		/p:GitCommitHash=$(grep GitCommitHash "$builddir"/git-info/roslyn.props | sed -E 's|</?GitCommitHash>||g' | tr -d ' ')
		"
	if [ "$_roslynver" != "${_roslynver##*-}" ]; then
		local args="$args /p:VersionSuffix=${_roslynver##*-}"
	fi
	DotNetBuildFromSource=false ./eng/build.sh --restore /p:UseAppHost=false
	./eng/build.sh --restore --build --pack $args
	for i in artifacts/packages/*/*/*.nupkg; do
		$_nuget push $i --source="$_packagesdir"
	done
}

_sdk() {
	"$_cli_root"/dotnet build-server shutdown
	if [ -z "${_sdkver+x}" ]; then
		local _sdkver=$(grep OutputPackageVersion "$builddir"/git-info/sdk.props | sed -E 's|</?OutputPackageVersion>||g' | tr -d ' ')
	fi
	local _sdkver_ns=$(awk '{if($2 == "Name=\"Microsoft.NET.Sdk\""){print $3}}' "$builddir"/src/installer/eng/Version.Details.xml | awk -F '"' '{print $2}')

	msg "[$(date)] Building sdk version $_sdkver"
	cd "$builddir"/src/sdk

	local args="
		-c Release
		-bl
		/consoleLoggerParameters:ShowTimestamp
		/p:GitCommitHash=$(grep GitCommitHash "$builddir"/git-info/sdk.props | sed -E 's|</?GitCommitHash>||g' | tr -d ' ')
		/p:Architecture=$_dotnet_target
		"
	if [ "$_sdkver" != "${_sdkver##*-}" ]; then
		local args="$args /p:VersionSuffix=${_sdkver##*-}"
	fi
	./build.sh --pack /p:Projects=$builddir/src/sdk/source-build.slnf $args

	for i in artifacts/packages/*/*/*.nupkg; do
		$_nuget push $i --source="$_packagesdir"
	done
	mkdir -p "$_downloaddir"/Sdk/$_sdkver_ns
	cp artifacts/packages/*/*/dotnet-toolset-internal-*.zip "$_downloaddir"/Sdk/$_sdkver_ns
}

_aspnetcore() {
	"$_cli_root"/dotnet build-server shutdown
	if [ -z "${_aspnetver+x}" ]; then
		local _aspnetver=$(grep OutputPackageVersion "$builddir"/git-info/aspnetcore.props | sed -E 's|</?OutputPackageVersion>||g' | tr -d ' ')
	fi
	local _aspnetver_ns=$(awk '{if($2 == "Name=\"Microsoft.AspNetCore.App.Ref.Internal\""){print $3}}' "$builddir"/src/installer/eng/Version.Details.xml | awk -F '"' '{print $2}')

	msg "[$(date)] Build aspnetcore version $_aspnetver"
	cd "$builddir"/src/aspnetcore
	local args="
		--os-name linux-musl
		-arch $_dotnet_target
		-c Release
		-no-build-nodejs
		-bl
		/consoleLoggerParameters:ShowTimestamp
		/p:GitCommitHash=$(grep GitCommitHash "$builddir"/git-info/aspnetcore.props | sed -E 's|</?GitCommitHash>||g' | tr -d ' ')
		/p:DotNetAssetRootUrl=file://$_downloaddir/
		/p:BuildOSName=linux-musl
		"
	# x86 crossgen broken
	case $CARCH in
		x86) local args="$args /p:CrossgenOutput=false";;
	esac

	if [ "$_aspnetver" != "${_aspnetver##*-}" ]; then
		local args="$args /p:VersionSuffix=${_aspnetver##*-}"
	fi
	./eng/build.sh --pack $args

	for i in artifacts/packages/*/*/*.nupkg; do
		$_nuget push $i --source="$_packagesdir"
	done
	mkdir -p "$_downloaddir"/aspnetcore/Runtime/$_aspnetver_ns
	cp artifacts/installers/*/aspnetcore-runtime-internal-*-linux-musl-$_dotnet_target.tar.gz "$_downloaddir"/aspnetcore/Runtime/$_aspnetver_ns
	cp artifacts/installers/*/aspnetcore_base_runtime.version "$_downloaddir"/aspnetcore/Runtime/$_aspnetver_ns
}

_installer() {
	"$_cli_root"/dotnet build-server shutdown
	msg "[$(date)] Building installer version $_installerver"
	cd "$builddir"/src/installer

	local args="
		-c Release
		-bl
		/consoleLoggerParameters:ShowTimestamp
		/p:OSName=linux-musl
		/p:HostOSName=linux-musl
		/p:Architecture=$_dotnet_target
		/p:CoreSetupBlobRootUrl=file://$_downloaddir/
		/p:DotnetToolsetBlobRootUrl=file://$_downloaddir/
		/p:EnableSourceLink=false
		/p:GitCommitHash=$(grep GitCommitHash "$builddir"/git-info/installer.props | sed -E 's|</?GitCommitHash>||g' | tr -d ' ')
		/p:GitCommitCount=$(grep GitCommitCount "$builddir"/git-info/installer.props | sed -E 's|</?GitCommitCount>||g' | tr -d ' ')
		/p:PublicBaseURL=file://$_downloaddir/
		"
	if [ "$_installerver" != "${_installerver##*-}" ]; then
		local args="$args /p:VersionSuffix=${_installerver##*-}"
	fi

	# x86 crossgen broken
	case $CARCH in
		x86) local args="$args /p:DISABLE_CROSSGEN=True";;
	esac
	./build.sh $args

	mkdir  -p "$_downloaddir"/installer/$_installerver
	cp artifacts/packages/*/*/dotnet-sdk-$_pkgver_macro*.tar.gz "$_downloaddir"/installer/$_installerver
}

build() {
	export _InitializeDotNetCli=$_cli_root
	export DOTNET_INSTALL_DIR=$_cli_root
	export PATH="$_cli_root:$PATH"
	export NUGET_PACKAGES=$_nugetdir
	export DotNetBuildFromSource=true
	export DOTNET_CLI_TELEMETRY_OPTOUT=true
	export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=true
	export SHELL=/bin/bash
	export EXTRA_CPPFLAGS="${CPPFLAGS/--sysroot=$CBUILDROOT}"
	export EXTRA_CXXFLAGS="${CXXFLAGS/--sysroot=$CBUILDROOT}"
	export EXTRA_CFLAGS="${CFLAGS/--sysroot=$CBUILDROOT}"
	export EXTRA_LDFLAGS="$LDFLAGS"
	unset CXXFLAGS CFLAGS LDFLAGS CPPFLAGS

	ulimit -n 4096

	_runtime
	_roslyn
	_sdk
	_aspnetcore
	_installer
}

package() {
	# lua-aports / buildrepo doesn't know to always build stage0 first when dealing
	# with virtual packages. Thus, we need to depend on an empty stage0 pkg that
	# dotnetx-build will pull, thus forcing build of stage0 first
	mkdir -p "$pkgdir"
}

bootstrap() {
	# allows stage0 to be pulled by dotnetx-build if first build of dotnetx
	provides="dotnet$_pkgver_name-bootstrap"
	provider_priority=$_pkgver_prior

	install -dm 755 \
		"$subpkgdir"/$_libdir/dotnet/bootstrap/$pkgver/docs \
		"$subpkgdir"/$_libdir/dotnet/bootstrap/$pkgver/comp \
		"$subpkgdir"/$_libdir/dotnet/artifacts/$pkgver

	# unpack build artifacts to bootstrap subdir for use by future builds
	tar --use-compress-program="pigz" \
		-xf "$_downloaddir"/installer/$_installerver/dotnet-sdk-$_pkgver_macro*.tar.gz \
		-C "$subpkgdir"/$_libdir/dotnet/bootstrap/$pkgver/ \
		--no-same-owner

	local _iltoolsArray="
		runtime.*.Microsoft.NETCore.TestHost.*.nupkg
		runtime.*.Microsoft.NETCore.ILAsm.*.nupkg
		runtime.*.Microsoft.NETCore.ILDAsm.*.nupkg
		"

	local _nupkgsArray="
		$_iltoolsArray
		Microsoft.NETCore.App.Host.*.*.nupkg
		Microsoft.NETCore.App.Runtime.*.*.nupkg
		Microsoft.NETCore.App.Crossgen2.*.*.nupkg
		runtime.*.Microsoft.NETCore.DotNetHost.*.nupkg
		runtime.*.Microsoft.NETCore.DotNetHostPolicy.*.nupkg
		runtime.*.Microsoft.NETCore.DotNetHostResolver.*.nupkg
		runtime.*.Microsoft.NETCore.DotNetAppHost.*.nupkg
		Microsoft.AspNetCore.App.Runtime.linux-musl-*.*.nupkg
		"

	# copies artifacts to artifacts dir for use by future dotnet builds
	for i in $_nupkgsArray; do install -Dm644 "$_packagesdir"/$i "$subpkgdir"/$_libdir/dotnet/artifacts/$pkgver/ || true; done
	for i in $_extra_nupkgs; do
		local filename=${i/::*}
		local filename=${filename##*/}
		install -Dm644 "$srcdir"/$filename "$subpkgdir"/$_libdir/dotnet/artifacts/$pkgver/
	done

	msg "Changing iltools version to $_iltoolsver"
	# source-build expects a certain version of ilasm, ildasm and testhost
	# following adjusts version
	for i in $_iltoolsArray; do
		local nupath="$subpkgdir"$_libdir/dotnet/artifacts/$pkgver/$i
		local nupath=$(find $nupath || true)
		if [ ! "$nupath" ]; then continue; fi
		local nupkg="${nupath##*/}"
		local nuname="${nupkg%-*}"
		local nuname="${nuname%.*.*.*}"
		local nuver="${nupkg/$nuname.}"
		local nuver="${nuver/.nupkg}"
		local nuspec="$nuname.nuspec"
		# shellcheck disable=SC2094
		unzip -p "$nupath" $nuspec | sed "s|$nuver|$_iltoolsver|" > "$srcdir"/$nuspec
		cd "$srcdir"
		zip -u "$nupath" $nuspec
		mv "$nupath" "${nupath/$nuver/$_iltoolsver}"
	done
}

# build relies on a plethora of nupkgs which are provided by this Artifacts file.
# stage0 sources these from Microsoft, which then allows bootstrap to build
# locally hosted versions. The following unpacks built tarball into directory
# for use by future builds.
artifacts() {
	pkgdesc="Internal package for building .NET $_pkgver_macro Software Development Kit"
	# hack to allow artifacts to pull itself
	provides="dotnet$_pkgver_name-bootstrap-artifacts"
	provider_priority=$_pkgver_prior

	# directory creation
	install -dm 755 \
		"$subpkgdir"/$_libdir/dotnet/artifacts/$pkgver \
		"$subpkgdir"/usr/share/licenses

	# extract artifacts to artifacts dir for use by future dotnet builds
	tar --use-compress-program="pigz" \
		-xf "$srcdir"/Private.SourceBuilt.Artifacts.*.noextract \
		-C "$subpkgdir"/$_libdir/dotnet/artifacts/$pkgver/ \
		--no-same-owner \
		--exclude '*x64*'
}

sha512sums="
8c03186212149ba38df996068d511c29bd9be31e40fd1d7d21fc15fd2c0f6272479e8145ccb9544bb48c2c90bc8001ba05af1a7d92a60018ba7a983bc6187731  dotnet-v6.0.116.tar.xz
3b6f37aee5698d7ef794c74a6d914b914f0220346a2f37e66e4a29db63e284747d02856ea6cd461c76f2a9e18ab047f40cc739e7f8227d69ea7316bce2020201  dotnet-sdk-6.0.116-linux-musl-x64.noextract
dd3ec888e0d6644f2d6ef17ca7ce540d62226bb459cc0bbfe938229e757a8f4a10fc314a078f9898143c2271b8a70de77ffbdaecfa8c4c87921421e729f53a64  dotnet-sdk-6.0.116-linux-musl-arm64.noextract
a35480c68e9f156a33225e80dc166db3a2fbe860f0f35497357fa6b5594df16dad9cbc8b5a7569ee4b6262070e100bf3c9d57721c68bac5bfc83abf61e4ace5d  dotnet-sdk-6.0.116-linux-musl-arm.noextract
64fffa28143c28ceefbae08e8086746e177a11242f6a5b778bc5597190748c9d3e869020d7d3f4b74efaad7fbb73258765e227c9bdd098501fdbbc7e7e6ec05b  Private.SourceBuilt.Artifacts.6.0.112.noextract
0eb771d7e23607a256f209c958a8025af6a7c1e20948b244f2903941aad5e1c0f130a9285ee29086d6188090e8692f5f129329a88da54d3f0a7e7e5b7e4257ef  runtime.linux-musl-x64.microsoft.netcore.ilasm.6.0.0.nupkg
5ad26a79b5ba3ebdc6932dde50218d2c0669377dcb628debbb448e0dfc5d001d7e07b121f18ecd50b667ab372e10ec0bfe166a6e2103faf2f824995fdad0c355  runtime.linux-musl-arm64.microsoft.netcore.ilasm.6.0.0.nupkg
2a24e56ddf0f3e3ef7cb64523b7c6ebf02b91a73287c342783eb66e43a9bbe0cd23eb4b26f435e6b194bf1a40017e6aae60333ff087b18657672b243e8c8ce76  runtime.linux-musl-arm.microsoft.netcore.ilasm.6.0.0.nupkg
a24efb7578e2020e17c877ffe00b49f8f476b0845fdc55c16404008a9566d8628a72c2208bd23df745c88592ebe9c922b0cf1bc1f95f834b539bbcc2cbf516c5  system.reactive.core.4.1.1.nupkg
42779a7bf1004fe0f7054cfa4f09f49d7f2a57c0543ec994ffbd54fb349abb508295476098ed35d60e9676be8bcc15aa8a9ec5c814cd1e058357530b5cdfb2b6  roslyn_57003-mono-namedmutex.patch
cf40e37b4adfc61e24e3b48a397b4d813726d190f271869d946035279bf662a694a0fca448f5ae06ad2bb2300595223109ad64f60f65dac5cddf9308e12147a3  roslyn_revert-lift-version-codeanalysis.patch
e67e0114bd324dae65eb19f6fa8c74414bee77cd30e299931b0d82b4ca1b6b6f88358a0c47ffb180f46c5cb28f61f79bb4a59d43c1ae3011bfe491e757de293a  runtime_76500-mono-musl-support.patch
6c614a48565c0e10f8714244e538bb453f7914ff58d01e9fd1255ad24698be916fd9e0a438c732737576fde6c0d68bec8f8958ce1b1b11b70c4a3b8663bdb8e2  runtime_76500-properly-set-toolchain-for-crossbuilding-on-alpine.patch
827e899a83103f666dc3d57c1ec695bebc659a574f4a1d754da0cafe8c18d7db79c3950267e905fa078f94612ee1101fbddd0ea62b3c08947d8bcd7d9c8de41c  runtime_82269-mono-thread-coop-undefine-fortify-source.patch
bfa4fca9987b4a1369e59abb3f872841ae994d47e5f873db43d9a0563f5e720cd85714e73aada912997da55077262e01f1ae120f8d32043d661ba89d12384caa  runtime_84442-support-adding-rids-with-dash-in-base-part.patch
153255e80c2d2a131c2985041132417573ee98fa4b90153a1417080dbfb4d9bd03db9d5e241e54f5e664c4136eaf7facca9d4dad7ededf99a8f9068f26283fdb  runtime_84443-suppress-clang-16-warnings.patch
d972e77df27748a80c9b23eca12f9fbd78be97f9034b79cc5703ba58eb6750171d9a115314300f883620ccbca89c65a99ca7a45d54a421b028b590190b4bed80  runtime_remove-usage-of-off64-t.patch
"
